package com.pap.rabbitmq.trans.annotation;

import java.lang.annotation.*;

/**
 * 注解类，用来实现无侵入的实现分布式事务
 *
 *
 * 解释如下：
 * 执行当前的业务操作与消息服务器消息发送，两个操作，考虑极端断电的情况，总会出现分布式事务的问题。
 * <p>
 * 考虑到如上的极端情况，则必须要有第三方守护进程来进行一个判断，于是可以使用如下的逻辑：
 * <p>
 * db记录“我要做业务操作了”
 * 执行业务操作
 * 发送消息
 * 如果消息成功，在消息确认时将db中“我要做业务操作啦”删除。
 * <p>
 * 来看下可能的异常：
 * 如果业务成功，发送消息失败(断电等情况), 此时守护进程查到db中有一条“我要做业务操作啦”，同时业务方提供一个回查接口，并查到业务确实成功了，进行消息重发。
 *
 *
 * @Auther: alexgaoyh
 * @Date: 2018/12/3 15:45
 * @Description:
 */
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Documented
public @interface TransRabbitMQAnnotation {

    /**
     * 要发送的交换机
     * @return
     */
    String exchange() default "TRANS_DLX_EXCHANGE";

    /**
     * 路由KEY
     * @return
     */
    String bindingKey() default "TRANS_DLX_ROUTING_KEY";

    /**
     * 业务名称
     * @return
     */
    String bizName() default "TRANS_MQ_BIZ";


    /**
     * 消息落库的处理方式 redis or db
     *
     * @return
     */
    String dbCoordinator() default "transRabbitMQRedisCoordinator";
}
